<!DOCTYPE HTML>
<html>
	<head>
		<meta http-equiv="Content-Type" content="html/html; charset=utf-8" />
		<title>SPLoginViewController Class Reference</title>
		<meta id="xcode-display" name="xcode-display" content="render"/>
		<meta name="viewport" content="width=550" />
		<link rel="stylesheet" type="text/css" href="../css/styles.css" media="all" />
		<link rel="stylesheet" type="text/css" media="print" href="../css/stylesPrint.css" />
		<meta name="generator" content="appledoc 2.1 (build 840)" />
	</head>
	<body>
		<header id="top_header">
			<div id="library" class="hideInXcode">
				<h1><a id="libraryTitle" href="../index.html">CocoaLibSpotify </a></h1>
				<a id="developerHome" href="../index.html">Spotify AB</a>
			</div>
			
			<div id="title" role="banner">
				<h1 class="hideInXcode">SPLoginViewController Class Reference</h1>
			</div>
			<ul id="headerButtons" role="toolbar">
				<li id="toc_button">
					<button aria-label="Show Table of Contents" role="checkbox" class="open" id="table_of_contents"><span class="disclosure"></span>Table of Contents</button>
				</li>
				<li id="jumpto_button" role="navigation">
					<select id="jumpTo">
	<option value="top">Jump To&#133;</option>
	
	<option value="overview">Overview</option>
	
	
	
	
	<option value="tasks">Tasks</option>
	
	
	
	
	
	<option value="properties">Properties</option>
	
	<option value="//api/name/allowsCancel">&nbsp;&nbsp;&nbsp;&nbsp;allowsCancel</option>
	
	<option value="//api/name/dismissesAfterLogin">&nbsp;&nbsp;&nbsp;&nbsp;dismissesAfterLogin</option>
	
	<option value="//api/name/loginDelegate">&nbsp;&nbsp;&nbsp;&nbsp;loginDelegate</option>
	
	
	
	
	<option value="class_methods">Class Methods</option>
	
	<option value="//api/name/loginControllerForSession:">&nbsp;&nbsp;&nbsp;&nbsp;+ loginControllerForSession:</option>
	
	
	
	
	
</select>
				</li>
			</ul>
		</header>
		<nav id="tocContainer" class="isShowingTOC">
			<ul id="toc" role="tree">
				
<li role="treeitem"><span class="nodisclosure"></span><span class="sectionName"><a href="#overview">Overview</a></span></li>




<li role="treeitem" id="task_treeitem"><span class="nodisclosure"></span><span class="sectionName"><a href="#tasks">Tasks</a></span><ul>
	
</ul></li>





<li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#properties">Properties</a></span><ul>
	
	<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/allowsCancel">allowsCancel</a></span></li>
	
	<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/dismissesAfterLogin">dismissesAfterLogin</a></span></li>
	
	<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/loginDelegate">loginDelegate</a></span></li>
	
</ul></li>



<li role="treeitem" class="children"><span class="disclosure"></span><span class="sectionName"><a href="#class_methods">Class Methods</a></span><ul>
	
	<li><span class="nodisclosure"></span><span class="sectionName"><a href="#//api/name/loginControllerForSession:">loginControllerForSession:</a></span></li>
	
</ul></li>




			</ul>
		</nav>
		<article>
			<div id="contents" class="isShowingTOC" role="main">
				<a title="SPLoginViewController Class Reference" name="top"></a>
				<div class="main-navigation navigation-top">
					<ul>
	<li><a href="../index.html">Index</a></li>
	<li><a href="../hierarchy.html">Hierarchy</a></li>
</ul>
				</div>
				<div id="header">
					<div class="section-header">
						<h1 class="title title-header">SPLoginViewController Class Reference</h1>
					</div>		
				</div>
				<div id="container">	
					
					<div class="section section-specification"><table cellspacing="0"><tbody>
						<tr>
	<td class="specification-title">Inherits from</td>
	<td class="specification-value">UINavigationController</td>
</tr><tr>
	<td class="specification-title">Conforms to</td>
	<td class="specification-value">SPSignupPageDelegate</td>
</tr><tr>
	<td class="specification-title">Declared in</td>
	<td class="specification-value">SPLoginViewController.h</td>
</tr>
						</tbody></table></div>
					
					
					
					
					<div class="section section-overview">
						<a title="Overview" name="overview"></a>
						<h2 class="subtitle subtitle-overview">Overview</h2>
						<p>This class provides a Spotify-designed login and signup flow for your application. iOS only.</p><div class="warning"><p><strong>Warning:</strong> <em>Important:</em> You must also include the provided <code>SPLoginResources.bundle</code> bundle
as a resource in your application to use this class.</p>

<p>If you want to save the user&rsquo;s details for automatic login, use the appropriate <a href="../Classes/SPSession.html"><code>SPSession</code></a>
delegate method to receive login credentials for storage (don&rsquo;t store the user&rsquo;s raw password),
then login directly next time using the saved credentias instead of using this view controller.
If login fails, display the appropriate error and you can then show this view controller for logging in manually again if needed.</p></div>
					</div>
					
					
					
					
					
					<div class="section section-tasks">
						<a title="Tasks" name="tasks"></a>
						<h2 class="subtitle subtitle-tasks">Tasks</h2>
						
						
						
						

						<ul class="task-list">
							<li>
	<span class="tooltip">
		<code><a href="#//api/name/loginControllerForSession:">+&nbsp;loginControllerForSession:</a></code>
		<span class="tooltip"><p>Returns an SPLoginViewController instance for the given session.</p></span>
	</span>
	
	
</li><li>
	<span class="tooltip">
		<code><a href="#//api/name/allowsCancel">&nbsp;&nbsp;allowsCancel</a></code>
		<span class="tooltip"><p>Returns whether the view controller allows the user to cancel the login process or not. Defaults to <code>YES</code>.</p></span>
	</span>
	<span class="task-item-suffix">property</span>
	
</li><li>
	<span class="tooltip">
		<code><a href="#//api/name/dismissesAfterLogin">&nbsp;&nbsp;dismissesAfterLogin</a></code>
		<span class="tooltip"><p>Returns whether the view controller dismisses itself after the user successfully logs in. Defaults to <code>YES</code>.</p></span>
	</span>
	<span class="task-item-suffix">property</span>
	
</li><li>
	<span class="tooltip">
		<code><a href="#//api/name/loginDelegate">&nbsp;&nbsp;loginDelegate</a></code>
		<span class="tooltip"><p>Returns the controller&rsquo;s loginDelegate object.</p></span>
	</span>
	<span class="task-item-suffix">property</span>
	
</li>
						</ul>
						
					</div>
					
					
					
					
					
					<div class="section section-methods">
						<a title="Properties" name="properties"></a>
						<h2 class="subtitle subtitle-methods">Properties</h2>
						
						<div class="section-method">
	<a name="//api/name/allowsCancel" title="allowsCancel"></a>
	<h3 class="subsubtitle method-title">allowsCancel</h3>
	
	
	
	<div class="method-subsection brief-description">
		<p>Returns whether the view controller allows the user to cancel the login process or not. Defaults to <code>YES</code>.</p>
	</div>		
	
	
	<div class="method-subsection method-declaration"><code>@property (nonatomic, readwrite) BOOL allowsCancel</code></div>
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	<div class="method-subsection declared-in-section">
		<h4 class="method-subtitle">Declared In</h4>
		<code class="declared-in-ref">SPLoginViewController.h</code><br />
	</div>				
	
	
</div>
						
						<div class="section-method">
	<a name="//api/name/dismissesAfterLogin" title="dismissesAfterLogin"></a>
	<h3 class="subsubtitle method-title">dismissesAfterLogin</h3>
	
	
	
	<div class="method-subsection brief-description">
		<p>Returns whether the view controller dismisses itself after the user successfully logs in. Defaults to <code>YES</code>.</p>
	</div>		
	
	
	<div class="method-subsection method-declaration"><code>@property (nonatomic, readwrite) BOOL dismissesAfterLogin</code></div>
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	<div class="method-subsection declared-in-section">
		<h4 class="method-subtitle">Declared In</h4>
		<code class="declared-in-ref">SPLoginViewController.h</code><br />
	</div>				
	
	
</div>
						
						<div class="section-method">
	<a name="//api/name/loginDelegate" title="loginDelegate"></a>
	<h3 class="subsubtitle method-title">loginDelegate</h3>
	
	
	
	<div class="method-subsection brief-description">
		<p>Returns the controller&rsquo;s loginDelegate object.</p>
	</div>		
	
	
	<div class="method-subsection method-declaration"><code>@property (nonatomic, readwrite, unsafe_unretained) id&lt;SPLoginViewControllerDelegate&gt; loginDelegate</code></div>
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	<div class="method-subsection declared-in-section">
		<h4 class="method-subtitle">Declared In</h4>
		<code class="declared-in-ref">SPLoginViewController.h</code><br />
	</div>				
	
	
</div>
						
					</div>
					
					
					
					<div class="section section-methods">
						<a title="Class Methods" name="class_methods"></a>
						<h2 class="subtitle subtitle-methods">Class Methods</h2>
						
						<div class="section-method">
	<a name="//api/name/loginControllerForSession:" title="loginControllerForSession:"></a>
	<h3 class="subsubtitle method-title">loginControllerForSession:</h3>
	
	
	
	<div class="method-subsection brief-description">
		<p>Returns an SPLoginViewController instance for the given session.</p>
	</div>		
	
	
	<div class="method-subsection method-declaration"><code>+ (SPLoginViewController *)loginControllerForSession:(SPSession *)<em>session</em></code></div>
	
	
	<div class="method-subsection arguments-section parameters">
		<h4 class="method-subtitle parameter-title">Parameters</h4>
		
		<dl class="argument-def parameter-def">
			<dt><em>session</em></dt>
			<dd><p>The session to create the SPLoginViewController instance for.</p></dd>
		</dl>
		
	</div>
	
	
	
	<div class="method-subsection return">
		<h4 class="method-subtitle parameter-title">Return Value</h4>
		<p>The created SPLoginViewController instance.</p>
	</div>
	
	
	
	
	
	
	
	
	
	
	
	<div class="method-subsection declared-in-section">
		<h4 class="method-subtitle">Declared In</h4>
		<code class="declared-in-ref">SPLoginViewController.h</code><br />
	</div>				
	
	
</div>
						
					</div>
					
					
					
					
				</div>
				<div class="main-navigation navigation-bottom">
					<ul>
	<li><a href="../index.html">Index</a></li>
	<li><a href="../hierarchy.html">Hierarchy</a></li>
</ul>
				</div>
				<div id="footer">
					<hr />
					<div class="footer-copyright">
						<p><span class="copyright">&copy; 2012 Spotify AB. All rights reserved. (Last updated: 2012-11-14)</span><br />
						
						<span class="generator">Generated by <a href="http://appledoc.gentlebytes.com">appledoc 2.1 (build 840)</a>.</span></p>
						
					</div>
				</div>
			</div>
		</article>
		<script type="text/javascript">
			function jumpToChange()
			{
				window.location.hash = this.options[this.selectedIndex].value;
			}
			
			function toggleTOC()
			{
				var contents = document.getElementById('contents');
				var tocContainer = document.getElementById('tocContainer');
				
				if (this.getAttribute('class') == 'open')
				{
					this.setAttribute('class', '');
					contents.setAttribute('class', '');
					tocContainer.setAttribute('class', '');
					
					window.name = "hideTOC";
				}
				else
				{
					this.setAttribute('class', 'open');
					contents.setAttribute('class', 'isShowingTOC');
					tocContainer.setAttribute('class', 'isShowingTOC');
					
					window.name = "";
				}
				return false;
			}
			
			function toggleTOCEntryChildren(e)
			{
				e.stopPropagation();
				var currentClass = this.getAttribute('class');
				if (currentClass == 'children') {
					this.setAttribute('class', 'children open');
				}
				else if (currentClass == 'children open') {
					this.setAttribute('class', 'children');
				}
				return false;
			}
			
			function tocEntryClick(e)
			{
				e.stopPropagation();
				return true;
			}
			
			function init()
			{
				var selectElement = document.getElementById('jumpTo');
				selectElement.addEventListener('change', jumpToChange, false);
				
				var tocButton = document.getElementById('table_of_contents');
				tocButton.addEventListener('click', toggleTOC, false);
				
				var taskTreeItem = document.getElementById('task_treeitem');
				if (taskTreeItem.getElementsByTagName('li').length > 0)
				{
					taskTreeItem.setAttribute('class', 'children');
					taskTreeItem.firstChild.setAttribute('class', 'disclosure');
				}
				
				var tocList = document.getElementById('toc');
				
				var tocEntries = tocList.getElementsByTagName('li');
				for (var i = 0; i < tocEntries.length; i++) {
					tocEntries[i].addEventListener('click', toggleTOCEntryChildren, false);
				}
				
				var tocLinks = tocList.getElementsByTagName('a');
				for (var i = 0; i < tocLinks.length; i++) {
					tocLinks[i].addEventListener('click', tocEntryClick, false);
				}
				
				if (window.name == "hideTOC") {
					toggleTOC.call(tocButton);
				}
			}
			
			window.onload = init;
			
			// If showing in Xcode, hide the TOC and Header
			if (navigator.userAgent.match(/xcode/i)) {
				document.getElementById("contents").className = "hideInXcode"
				document.getElementById("tocContainer").className = "hideInXcode"
				document.getElementById("top_header").className = "hideInXcode"
			}
			
		</script>
	</body>
</html>